package com.javabasestage2.enumeration;

/**
 * @author 冯智仁
 * @version 9.9
 */
public class enumMethod {
    public static void main(String[] args) {
        //使用Season1 枚举类， 来演示各种enum方法
        Season1 autumn = Season1.AUTUMN;
        System.out.println(autumn);
        //输出枚举对象的名字AUTUMN
        System.out.println(autumn.name());
        //ordinal() 输出的是该枚举对象的次序/数组下标，【从0开始】
        //AUTUMN 枚举对象时第三，因此输出 2
        System.out.println(autumn.ordinal());//2
        //从反编译可以看出 values方法， 返回 Season1[]
        //含有定义的所有枚举对象
        Season1[] values = Season1.values();
        for(Season1 s : values){//增强for循环，从values数组依次取出数据，直到没有
            System.out.println(s);
        }
        //valueOf: 将字符串转换成枚举对象，要求将字符串必须VT为已有的常量名，否则报错
        //执行流程
        //1. 根据你输入的"AUTUMN" 到 Season2的枚举对象去查找
        //2. 如果找到了， 就返回， 如果没有找到，就报错
        Season1 spring = Season1.valueOf("AUTUMN");
        System.out.println("autumn1=" + spring);
        System.out.println(autumn == spring);//两个对象是同一个对象
        /**
         *   if (self.getClass() != other.getClass() && // optimization
         *             self.getDeclaringClass() != other.getDeclaringClass())
         *             throw new ClassCastException();
         *         return self.ordinal - other.ordinal;
         *     }
         *     从底层代码可以看出compareTo方法其实就是编号相减
         */
        //compareTo:比较两个枚举常量，比较的是下标/编号
        System.out.println(Season1.SPRING.compareTo(Season1.AUTUMN));//1-3=-2
    }
}
